import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import { ROLE_PERMISSIONS, generateAllPermissions, PERMISSION } from '@/constants/permissions.js'

export const useRoleStore = defineStore('role', () => {
    // 角色列表
    const roles = ref([])
    
    // 当前编辑的角色
    const currentEditingRole = ref(null)
    
    // 🎯 核心方法1：获取角色权限
    const getRolePermissions = (roleName) => {
        if (roleName === 'SUPER_ADMIN') {
            return generateAllPermissions() // 超级管理员拥有所有权限
        }
        return ROLE_PERMISSIONS[roleName] || []
    }
    
    // 🎯 核心方法2：检查用户是否有某个权限
    const hasPermission = (user, permission) => {
        if (!user) return false
        
        // 超级管理员直接通过
        if (user.roleName === 'SUPER_ADMIN') {
            return true
        }
        
        // 检查具体权限
        const userPermissions = user.permissions || []
        return userPermissions.includes(permission)
    }
    
    // 🎯 核心方法3：生成权限树数据
    const getPermissionTreeData = computed(() => {
        const treeData = []
        
        Object.entries(PERMISSION).forEach(([module, actions]) => {
            const moduleNode = {
                label: getModuleLabel(module),
                value: module,
                children: []
            }
            
            Object.entries(actions).forEach(([action, permission]) => {
                moduleNode.children.push({
                    label: getActionLabel(action),
                    value: permission
                })
            })
            
            treeData.push(moduleNode)
        })
        
        return treeData
    })
    
    // 🎯 核心方法4：获取模块显示名称
    const getModuleLabel = (module) => {
        const labels = {
            'DASHBOARD': '仪表盘',
            'USER': '用户管理', 
            'ROLE': '角色管理',
            'PERSONAL': '个人设置'
        }
        return labels[module] || module
    }
    
    // 🎯 核心方法5：获取操作显示名称
    const getActionLabel = (action) => {
        const labels = {
            'VIEW': '查看',
            'CREATE': '创建',
            'EDIT': '编辑',
            'DELETE': '删除',
            'ASSIGN': '分配',
            'EXPORT': '导出'
        }
        return labels[action] || action
    }
    
    return {
        // 状态
        roles,
        currentEditingRole,
        
        // 计算属性
        getPermissionTreeData,
        
        // 方法
        getRolePermissions,
        hasPermission,
        getModuleLabel,
        getActionLabel
    }
})